package com.ww.exercise.coroutine

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.job
import kotlinx.coroutines.withContext

/**
 * 协程取消与资源释放（比Java的Future.cancel()更优雅）
 */
suspend fun processWithResource() {
    // 资源
    try {
        withContext(Dispatchers.IO) {
            // 注册取消回调：协程取消时关闭连接
            currentCoroutineContext().job.invokeOnCompletion {
                println("资源已释放")
            }

            // 执行具体操作
        }
    } finally {
        // 正常结束也释放资源
    }
}